home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / t_os / gpen32k / source.exe / LIB / OSRC / KEYIN.C < prev    next >
C/C++ Source or Header  |  1993-08-04  |  1KB  |  91 lines

  1. /*
  2.             指定サイズ文字入力関数
  3.                                             Okome System
  4. */
  5.  
  6. #include    <string.h>
  7. #include    <MOS.H>
  8. #include    <FMCfrb.h>
  9. #include    <kkstr2.h>
  10. #include    <normlib.h>
  11.  
  12. extern int kkx, kky;
  13.  
  14. int keyin(int x, int y, char *nn, int l, int c0, int c1, int p )
  15. {
  16.     static int xp=0;
  17.     unsigned int m, k;
  18.     int sl, r = 3;
  19.     sl = strlen(nn);
  20.     kkx = x + xp*8;
  21.     kky = y;
  22.     if (xp > sl)
  23.     {
  24.         xp = sl;
  25.     }
  26.     do    {
  27.         m = KYB_read(1, &k);
  28.     }    while((m & 0xff00) == 0xff00 && KAN_inpchk()==KAN_MISET);
  29.     if ( (m & 0xff00) != 0xff00)
  30.     {
  31.         switch(m)
  32.         {
  33.         case 0x08:
  34.             if (sl)
  35.             {
  36.                 if (xp==0)    xp++;
  37.                 strcpy(&nn[xp-1], &nn[xp]);
  38.                 sl--;
  39.                 xp--;
  40.             }
  41.             break;
  42.         case 0x0d:
  43.         case 0x8012:
  44.             xp = 0;
  45.             r = 0;
  46.             break;
  47.         case 0x1d:
  48.             if (xp)
  49.             {    xp--;    }
  50.             break;
  51.         case 0x1c:
  52.             if (xp<sl)
  53.             {    xp++;    }
  54.             break;
  55.         case 0x7f:
  56.             if (sl>xp)
  57.             {
  58.                 strcpy(&nn[xp], &nn[xp+1]);
  59.             }
  60.             break;
  61.         case 0x1b:
  62.         case 0x8011:
  63.             r = 2;
  64.             break;
  65.         default:
  66.             if (m < 0x100 && m > 0x1f)
  67.             {
  68.                 if (sl<l)
  69.                 {
  70.                     _rstrcpy( &nn[xp+1], &nn[xp] );
  71.                     sl++;
  72.                     nn[xp] = m;
  73.                     if (xp<l-1) xp++;
  74.                 }
  75.             }
  76.         }
  77.     }
  78.     if ( m / 0x100 != 0xff || p)
  79.     {
  80.         MOS_disp(0);
  81.         boxf( x, y, x+l*8-1, y+15, c1 );
  82.         symbol( x,y+15, nn, 16, c0 );
  83.         if (r)
  84.         {
  85.             boxb( x + xp*8, y, x + xp*8+1, y+15, 0xa );
  86.         }
  87.         MOS_disp(1);
  88.     }
  89.     return (r);
  90. }
  91.